package classes;


import bdXML.EventosXML;
import bdXML.SalasXML;

import easyaccept.script.test.TestFacade;

/*
 * Esta classe implementa o padrao Singleton
 */
public class SistemaAlocador extends TestFacade {

	private ManagerFacade gerencia = ManagerFacade.getInstance();
	private EventosXML bdEv = EventosXML.getInstance();
	private SalasXML bdS = SalasXML.getInstance();

	public void zerarSistema() {
		this.bdEv.excluiEventosXML();
		this.bdS.excluiSalasXML();
	}

	public void encerrarSistema() {
		this.zerarSistema();
	}

	public String localizarEvento(String atributo, String valor)
			throws Exception {
		return this.gerencia.localizaEvento(atributo, valor);
	}

	public void cancelarEvento(String idEv) throws Exception {
		this.gerencia.cancelarEvento(idEv);
	}

	public void removerSala(String idSala) throws Exception {
		this.gerencia.removeSala(idSala);
	}

	public void desalocarEvento(String idEv) throws Exception {
		this.gerencia.desalocarEvento(idEv);

	}

	public void alocarEvento(String idEv, String idSala) throws Exception {
		this.gerencia.alocarEvento(idEv, idSala);
	}

	// METODOS DE SALA!!!

	/*
	 * Metodo para adicionar sala (Construtor com 5 parametros)
	 */
	public void adicionarSala(String id, int capacidade, String finalidade,
			String tipo, String apelido) throws Exception {
		this.gerencia.addSala(id, capacidade, finalidade, tipo, apelido, "");

	}

	/*
	 * Metodo para adicionar sala (Construtor com 4 parametros)
	 */
	public void adicionarSala(String id, int capacidade, String finalidade,
			String tipoApelido) throws Exception {
		this.gerencia.addSala(id, capacidade, finalidade, tipoApelido, "", "");

	}

	public void adicionarSala(String id, int capacidade, String finalidade,
			String tipo, String apelido, String open) throws Exception {
		this.gerencia.addSala(id, capacidade, finalidade, tipo, apelido, open);
	}

	public String getAtributoSala(String id, String atributo) throws Exception {

		Sala sala = bdS.recupera(id);
		if (sala != null) {
			if (atributo == null)
				throw new Exception("Atributo invalido");
			if (atributo.equals("apelido"))
				return sala.getApelido();
			if (atributo.equals("finalidade"))
				return sala.getFinalidade();
			if (atributo.equals("tipo")) {
				if (sala.getTipo().equals(""))
					throw new Exception("Atributo invalido");
				return sala.getTipo();
			}
			if (atributo.equals("capacidade"))
				return "" + sala.getCapacidade() + "";
			throw new Exception("Sala nao existe.");
		}
		throw new Exception("Sala nao existe.");
	}

	/*
	 * PARA EVENTOS
	 */

	public void adicionarEvento(String id, String nome, String inicio,
			String fim, String area, String contato) throws Exception {
		this.gerencia.addEv(id, nome, inicio, fim, area, contato, 0);

	}

	public void adicionarEvento(String id, String nome, String inicio,
			String fim, String area, String contato, int repeticoes)
			throws Exception {
		this.gerencia.addEv(id, nome, inicio, fim, area, contato, repeticoes);

	}

	public String getAtributoEvento(String idEvento, String atributo)
			throws Exception {
		Evento event = bdEv.recupera(idEvento);
		if (idEvento == null || idEvento.replaceAll(" ", "").isEmpty())
			throw new Exception("Evento nao existe.");
		if (event == null)
			throw new Exception("Evento nao existe.");
		else {
			if (atributo == null)
				throw new Exception("Atributo nao existe.");
			if (atributo.equals("nome"))
				return event.getNome();
			if (atributo.equals("inicio"))
				return event.getInicio();
			if (atributo.equals("fim"))
				return event.getFim();
			if (atributo.equals("area"))
				return event.getArea();
			if (atributo.equals("contato"))
				return event.getContato();
			if (atributo.equals("repeticoes"))
				return event.getRepeticoes();
			throw new Exception("Atributo nao existe.");
		}
	}

}
